package com.example.kotlindemo

open class Obj(var name: String, var age: Int) { // 主构造函数

    var address: String = "Unknown" // 一个额外的属性

    // 次构造函数，可以有自己的参数
    constructor(name: String, age: Int, address: String) : this(name, age) {
        this.address = address
        println("Constructor with address called")
    }

    // 次构造函数可以使用自己的逻辑，而不需要主构造函数的所有参数
    constructor(name: String) : this(name, 0) {
        println("Constructor with only name called")
    }

    open fun show(){

    }
}

class Test1: Obj{
    constructor() :super("aaa",10){

    }

    override fun show() {
        super.show()
    }
}

fun main() {
    // 使用主构造函数
    val person1 = Obj("John", 25)
    println("Obj1: ${person1.name}, ${person1.age}, ${person1.address}")

    // 使用带有 address 的次构造函数
    val person2 = Obj("Jane", 30, "New York")
    println("Obj2: ${person2.name}, ${person2.age}, ${person2.address}")

    // 使用只有 name 的次构造函数
    val person3 = Obj("Alice")
    println("Obj3: ${person3.name}, ${person3.age}, ${person3.address}")
}
